#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "observerpattern.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow {
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    // UI按钮事件
    void on_refreshPortsBtn_clicked();
    void on_openPortBtn_clicked();
    void on_setSubscribeBtn_clicked();//TODO 设置订阅次数
    void on_cancelSubscribeBtn_clicked();
    void on_sendDataBtn_clicked();
    void onNewObserverTimeout();//TODO 处理观察者的超时
     void onNewObserverDataUpdated(const QString &data);// 新增：处理新观察者的数据更新


    // 业务层信号处理
    void onDataUpdated(const QString &data);//收到并处理串口数据时触发
    void onSubscribeStatusChanged(int remainingCount);//订阅次数变化时触发
    void onTimeoutOccurred();//等待响应超时时触发
    void onPortStateChanged(bool isOpen);//串口打开 / 关闭状态变化时触发

    void on_setSubscribeBtn2_clicked();

    void on_cancelSubscribeBth2_clicked();

private:
    Ui::MainWindow *ui;
    SerialPortCore *m_serialCore;       // 核心层串口对象
    SerialPortSubject *m_serialSubject; // 业务层主题
    SerialPortObserver *m_observer;     // 业务层观察者
    SerialPortObserver *m_observer2;//TODO 新增观察者2
};

#endif // MAINWINDOW_H
